#ifndef FINDER_H
#define FINDER_H

#include <QObject>
#include <QString>
#include <QStringList>
#include <QDebug>
class QFile;
class QStringList;
class QProgressBar;
const int nS = 125723;
const int minWord = 5;

/** Ищет потдходящие слова в словаре.
 * @author Василий Почкаенко
 */
class Finder : public QObject
{
Q_OBJECT
private:
	/** Искомая строка-шаблон.*/
	QString str;

	/** Длина искомой строки.
	 *
	 * Заполняю при приёме строки, чтобы сыкономить время в цикле поиска.
	 */
	int l;

	/** Текущее слово из словаря.*/
	QString w;

	/** Словарь.*/
	QStringList dictionary;

	/** Индикатор прогресса.*/
	QProgressBar * progress;

	/** Сравнить слово с шаблоном.*/
	bool collate();

	/** Удалить из строки повторы символов.*/
	inline QString getUnique(const QString & s){
		QString rez("");
		for(int i = 0; i < l; ++i){
			if(rez.contains(s.at(i)));else rez.append(s.at(i));
		}
		return rez;
	}
public:
	explicit Finder(QProgressBar * progress, QObject *parent = 0);

	/** Ищет потдходящие слова в словаре.*/
	QStringList find(const QString & s);

	/** Ищет потдходящие слова в словаре. Исключает повторения.*/
	QStringList findWithoutDouble(const QString & s);

	/** Загрузить словарь из файла.*/
	void loadDictionary();
signals:

public slots:

};

#endif // FINDER_H
